// 转换成年月日时间格式
export function formatDateTime (value, separator = '-') {
	if (!value) return '';
	let date = new Date(parseInt(value));
	let y = date.getFullYear();
	let m = ("0" + (date.getMonth() + 1)).slice(-2);
	let d = ("0" + date.getDate()).slice(-2);
	return `${y}${separator}${m}${separator}${d}`;
};
// 转换成年月日时分时间格式
export function formatTimestamp (timestamp) {
	// 创建一个Date对象
	const date = new Date(timestamp);

	// 提取年月日时分
	const year = date.getFullYear();
	const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始，需要加1，并且保证两位数字
	const day = String(date.getDate()).padStart(2, '0'); // 保证两位数字
	const hours = String(date.getHours()).padStart(2, '0'); // 保证两位数字
	const minutes = String(date.getMinutes()).padStart(2, '0'); // 保证两位数字

	// 拼接成所需的格式
	const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}`;

	return formattedDate;
}
// 转换20250311类型的时间
export function formatDate (val){
	const date = new Date(val);
	const year = date.getFullYear();
	const month = String(date.getMonth() + 1).padStart(2, '0');
	const day = String(date.getDate()).padStart(2, '0');
	return `${year}${month}${day}`;
}

// 转换2025-03-11类型的时间
export function transformDateFormat (dateStr){
   if (typeof dateStr === 'string' && dateStr.length === 8) {
        return `${dateStr.slice(0, 4)}-${dateStr.slice(4, 6)}-${dateStr.slice(6)}`;
    }
    return dateStr;
}
/**
 * 验证身份证号码
 * @param {string} idCard - 身份证号码
 * @returns {boolean} - 返回验证结果
 */
export function validateIdCard(idCard) {
	// 如果为空，返回false
	if (!idCard) {
		return false;
	}
	
	// 身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X
	const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
	if (!reg.test(idCard)) {
		return false;
	}
	
	// 15位身份证转18位
	if (idCard.length === 15) {
		idCard = idCard.slice(0, 6) + '19' + idCard.slice(6);
	}
	
	// 验证生日
	const birthday = idCard.substr(6, 4) + '/' + idCard.substr(10, 2) + '/' + idCard.substr(12, 2);
	if (isNaN(Date.parse(birthday))) {
		return false;
	}
	
	// 18位身份证需要验证最后一位校验位
	if (idCard.length === 18) {
		const idCardWi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 加权因子
		const idCardY = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; // 校验位
		let sum = 0;
		
		for (let i = 0; i < 17; i++) {
			sum += parseInt(idCard.substr(i, 1)) * idCardWi[i];
		}
		
		const idCardLast = idCardY[sum % 11]; // 计算出校验码
		// 检查验证码是否正确
		if (idCardLast !== idCard.substr(17, 1).toUpperCase()) {
			return false;
		}
	}
	
	return true;
}

/**
 * 从身份证号码中获取信息
 * @param {string} idCard - 身份证号码
 * @returns {object} - 返回包含生日、性别等信息的对象
 */
export function getInfoFromIdCard(idCard) {
	if (!validateIdCard(idCard)) {
		return null;
	}
	
	// 统一转换为18位
	if (idCard.length === 15) {
		idCard = idCard.slice(0, 6) + '19' + idCard.slice(6);
	}
	
	// 获取出生年月日
	const year = idCard.substr(6, 4);
	const month = idCard.substr(10, 2);
	const day = idCard.substr(12, 2);
	
	// 格式化生日
	const birthday = year + '-' + month + '-' + day;
	
	// 计算年龄
	const now = new Date();
	let age = now.getFullYear() - parseInt(year);
	const monthDiff = (now.getMonth() + 1) - parseInt(month);
	
	if (monthDiff < 0 || (monthDiff === 0 && now.getDate() < parseInt(day))) {
		age--;
	}
	
	const gender = parseInt(idCard.substr(16, 1)) % 2 === 1 ? 1 : 2;
	
	return {
		birthday,
		gender,
		age,
		birthYear: year,
		birthMonth: month,
		birthDay: day,
		idCardAge: transformDateFormat(idCard.substr(6, 8)) // 直接从身份证中获取的年月日（YYYYMMDD格式）
	};
}
// 图片上传转换格式
export function calculateAge(birthDateStr){
const birthDate = new Date(birthDateStr);
      const currentDate = new Date();
      let age = currentDate.getFullYear() - birthDate.getFullYear();
      const monthDiff = currentDate.getMonth() - birthDate.getMonth();
      if (monthDiff < 0 || (monthDiff === 0 && currentDate.getDate() < birthDate.getDate())) {
        age--;
      }
      return age;
}
